home *** CD-ROM | disk | FTP | other *** search
-
- =pod
-
- =head1 NAME
-
- Moose::Cookbook - How to cook a Moose
-
- =head1 DESCRIPTION
-
- The Moose cookbook is a series of recipes showing various Moose
- features. Most recipes present some code demonstrating some feature,
- and then explain the details of the code.
-
- You should probably read the L<Moose::Manual> first. The manual
- explains Moose concepts without being too code-heavy.
-
- =head1 RECIPES
-
- =head2 Basic Moose
-
- These recipes will give you a good overview of Moose's capabilities, starting
- with simple attribute declaration, and moving on to more powerful features like
- laziness, types, type coercion, method modifiers, and more.
-
- =over 4
-
- =item L<Moose::Cookbook::Basics::Recipe1> - The (always classic) B<Point> example
-
- A simple Moose-based class. Demonstrates Moose attributes and subclassing.
-
- =item L<Moose::Cookbook::Basics::Recipe2> - A simple B<BankAccount> example
-
- A slightly more complex Moose class. Demonstrates using a method
- modifier in a subclass.
-
- =item L<Moose::Cookbook::Basics::Recipe3> - A lazy B<BinaryTree> example
-
- Demonstrates several attribute features, including types, weak
- references, predicates ("does this object have a foo?"), defaults,
- laziness, and triggers.
-
- =item L<Moose::Cookbook::Basics::Recipe4> - Subtypes, and modeling a simple B<Company> class hierarchy
-
- Introduces the creation and use of custom types, a C<BUILD> method,
- and the use of C<override> in a subclass.
-
- =item L<Moose::Cookbook::Basics::Recipe5> - More subtypes, coercion in a B<Request> class
-
- More type examples, including the use of type coercions.
-
- =item L<Moose::Cookbook::Basics::Recipe6> - The augment/inner example
-
- Demonstrates the use of C<augment> method modifiers, a way of turning
- the usual method overriding style "inside-out".
-
- =item L<Moose::Cookbook::Basics::Recipe7> - Making Moose fast with immutable
-
- Making a class immutable greatly increases the speed of accessors and
- object construction.
-
- =item L<Moose::Cookbook::Basics::Recipe8> - Builder methods and lazy_build
-
- The builder feature provides an inheritable and role-composable way to
- provide a default attribute value.
-
- =item L<Moose::Cookbook::Basics::Recipe9> - Operator overloading, subtypes, and coercion
-
- Demonstrates using operator overloading, coercion, and subtypes to
- model how eye color is determined during reproduction.
-
- =item L<Moose::Cookbook::Basics::Recipe10> - Using BUILDARGS and BUILD to hook into object construction
-
- This recipe demonstrates the use of C<BUILDARGS> and C<BUILD> to hook
- into object construction.
-
- =item L<Moose::Cookbook::Basics::Recipe11> - Extending a non-Moose base class
-
- In this recipe, we make a Moose-based subclass of L<DateTime>, a
- module which does not use Moose itself.
-
- =back
-
- =head2 Moose Roles
-
- These recipes will show you how to use Moose roles.
-
- =over 4
-
- =item L<Moose::Cookbook::Roles::Recipe1> - The Moose::Role example
-
- Demonstrates roles, which are also sometimes known as traits or
- mix-ins. Roles provide a method of code re-use which is orthogonal to
- subclassing.
-
- =item L<Moose::Cookbook::Roles::Recipe2> - Advanced Role Composition - method exclusion and aliasing
-
- Sometimes you just want to include part of a role in your
- class. Sometimes you want the whole role but one of its methods
- conflicts with one in your class. With method exclusion and aliasing,
- you can work around these problems.
-
- =item L<Moose::Cookbook::Roles::Recipe3> - Applying a role to an object instance
-
- In this recipe, we apply a role to an existing object instance.
-
- =back
-
- =head2 Meta Moose
-
- These recipes show you how to write your own meta classes, which lets
- you extend the object system provided by Moose.
-
- =over 4
-
- =item L<Moose::Cookbook::Meta::Recipe1> - Welcome to the meta-world (Why Go Meta?)
-
- If you're wondering what all this "meta" stuff is, and why you should
- care about it, read this "recipe".
-
- =item L<Moose::Cookbook::Meta::Recipe2> - A meta-attribute, attributes with labels
-
- One way to extend Moose is to provide your own attribute
- metaclasses. Attribute metaclasses let you extend attribute
- declarations (with C<has>) and behavior to provide additional
- attribute functionality.
-
- =item L<Moose::Cookbook::Meta::Recipe3> - Labels implemented via attribute traits
-
- Extending Moose's attribute metaclass is a great way to add
- functionality. However, attributes can only have one metaclass.
- Applying roles to the attribute metaclass lets you provide
- composable attribute functionality.
-
- =item L<Moose::Cookbook::Meta::Recipe4> - Adding a "table" attribute to the metaclass
-
- If you want to store more information about your classes, you'll have
- to extend C<Moose::Meta::Class>. Doing so is simple, but you'll
- probably also want to provide some sugar, so see
- L<Moose::Cookbook::Extending::Recipe2> as well.
-
- =item L<Moose::Cookbook::Meta::Recipe5> - The "table" attribute implemented as a metaclass trait
-
- This recipe takes the class metaclass we saw in the previous recipe
- and reimplements it as a metaclass trait.
-
- =item L<Moose::Cookbook::Meta::Recipe6> - A method metaclass for marking methods public or private
-
- This recipe shows a custom method metaclass that implements making a
- method private.
-
- =item L<Moose::Cookbook::Meta::Recipe7> - Using a blessed array reference as an object instance
-
- This recipe shows an example of how you create your own meta-instance
- class. The meta-instance determines the internal structure of object
- instances and provide access to attribute slots.
-
- =item Moose::Cookbook::Meta::Recipe8 - Hooking into immutabilization (TODO)
-
- Moose has a feature known as "immutabilization". By calling C<<
- __PACKAGE__->meta()->make_immutable() >> after defining your class
- (attributes, roles, etc), you tell Moose to optimize things like
- object creation, attribute access, and so on.
-
- If you are creating your own metaclasses, you may need to hook into
- the immutabilization system. This cuts across a number of spots,
- including the metaclass class, meta method classes, and possibly the
- meta-instance class as well.
-
- This recipe shows you how to write extensions which immutabilize
- properly.
-
- =back
-
- =head2 Extending Moose
-
- These recipes cover some more ways to extend Moose, and will be useful
- if you plan to write your own C<MooseX> module.
-
- =over 4
-
- =item L<Moose::Cookbook::Extending::Recipe1> - Moose extension overview
-
- There are quite a few ways to extend Moose. This recipe provides an
- overview of each method, and provides recommendations for when each is
- appropriate.
-
- =item L<Moose::Cookbook::Extending::Recipe2> - Providing a base object class role
-
- Many base object class extensions can be implemented as roles. This
- example shows how to provide a base object class debugging role that
- is applied to any class that uses a notional C<MooseX::Debugging>
- module.
-
- =item L<Moose::Cookbook::Extending::Recipe3> - Providing an alternate base object class
-
- You may find that you want to provide an alternate base object class
- along with a meta extension, or maybe you just want to add some
- functionality to all your classes without typing C<extends
- 'MyApp::Base'> over and over.
-
- =item L<Moose::Cookbook::Extending::Recipe4> - Acting like Moose.pm and providing sugar Moose-style
-
- This recipe shows how to provide a replacement for C<Moose.pm>. You
- may want to do this as part of the API for a C<MooseX> module,
- especially if you want to default to a new metaclass class or base
- object class.
-
- =back
-
- =head1 SNACKS
-
- =over 4
-
- =item L<Moose::Cookbook::Snack::Keywords>
-
- =item L<Moose::Cookbook::Snack::Types>
-
- =back
-
- =head1 SEE ALSO
-
- =over 4
-
- =item L<http://www.gsph.com/index.php?Lang=En&ID=291>
-
- =back
-
- =head1 AUTHOR
-
- Stevan Little E<lt>stevan@iinteractive.comE<gt>
-
- =head1 COPYRIGHT AND LICENSE
-
- Copyright 2006-2010 by Infinity Interactive, Inc.
-
- L<http://www.iinteractive.com>
-
- This library is free software; you can redistribute it and/or modify
- it under the same terms as Perl itself.
-
- =cut
-